AlteryxのPythonツールで機械学習をしてみる
こんにちは、小澤です。
Alteryx 2018.3からの新しいツールとして、Pythonツールが登場しました。 私はPythonよりもRの方が好きな派閥ですが、世の中の皆さんはきっと大歓喜してることでしょう。
え?Alteryxはコーディング不要が売りじゃなかったのかって? もちろんその通りですが、コーディング不要であることを推しにした「コードフリー」の他に、 普段プログラムをゴリゴリ書いてるぜ!って人にとっても使いやすいツールとして「コードフレンドリー」というのも推しにしています。
さて、そんなこんなでPythonツールを使う際には、Python側でいろいろ分析したりとかって感じになるかと思われます。 そんな時に、機械学習などを使って作成したモデルってどうやってAlteryxで利用しよっか?ってのを見ていきましょう。
Pythonツールの出力とモデルを渡す際の問題点
さて、Pythonツールでは、入出力がPandasのDataFrameとなります。 Alteryxが用意しているライブラリを使って受け渡しが可能となります。
from ayx import Alteryx # ツールの入力を受け取って変数に入れる # Rツールなどと同様に「#1」のようなコネクションの名前を指定して取得する df = Alteryx.read("#1") # ... # (色々処理を実行) # ... # Alteryx側に処理結果を出力する # 出力は全部5つあるので、その番号を指定 Alteryx.write(df, 1)
さて、ここでAlteryx.writeの第1引数として受け付けるものはDataFrameです。 Pythonツールの処理の中で、機械学習した結果を後続の処理で利用したいので以下のような実装をしてみました。
import pandas as pd from sklearn.svm import SVC from ayx import Alteryx df = Alteryx.read("#1") x = df.iloc[:, 0:4] y = df.iloc[:, 4] clf = SVC() clf.fit(x, y) model = pd.DataFrame([{'model' : clf}]) Alteryx.write(model, 1)
結果は残念ながら以下のようなエラーが出ました。
scikit-learnのモデルをそのまま出力するのには対応してないようですね。。
ならばシリアライズだ
どうやらそのままでは出力できないようなので、別な方法を考えましょう。 今回は、モデルをシリアライズしてファイルに出力します。 やり方はとっても簡単です。
from sklearn.externals import joblib path = joblib.dump(clf, 'Z:\デスクトップ\clf.pkl') Alteryx.write(pd.DataFrame([{'model_path' : path[0]}]), 1)
joblibを使ってpickleファイルに出力しています。 この後出力したファイルを使うのですが、相対パスにしちゃうとうまいこと読み込んでくれないようなので、絶対パスで指定します。
このモデルを使って推論を行うにはもう1つPythonツールを繋ぎます。
このワークフローでの左側のPythonツールが学習用のスクリプトを書いたもの、右側が推論を行なっているものになります。 推論は、モデルを読み込んで予測を行なっているのみです。
import pandas as pd from ayx import Alteryx from sklearn.externals import joblib df = Alteryx.read('#2') model_path = Alteryx.read('#1')['model_path'][0] clf = joblib.load(model_path) x = df.iloc[:, 0:4] df['predict'] = clf.predict(x) Alteryx.write(df, 1)
以下のように推論結果を付与したデータが得られます。
あとは、この学習と推論の部分をそれぞれマクロ化しちゃえばいい感じになりそうですね。
おわりに
今回はAlteryxのPythonツールを使ってsciket-learnの学習と推論の部分を分離させてみました。 従来のRベースで作成されたScoreツールのようなものをこれで作成できます。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。